package com.zmc.lostfound.post.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zmc.lostfound.common.utils.Result;
import com.zmc.lostfound.post.entity.CommentEntity;
import com.zmc.lostfound.post.vo.*;

import java.util.List;

/**
 * @author ZMC
 * @description 评论管理业务接口
 * @email 2869581855@qq.com
 * @date 2023-07-05 15:49:44
 */
public interface CommentService extends IService<CommentEntity> {

    /**
     * 用户发布评论
     *
     * @param commentPublishVO 用户发布评论请求体
     * @return Result
     */
    Result publish(CommentPublishVO commentPublishVO);

    /**
     * 按主键id删除评论
     *
     * @param id 主键id
     * @return Result
     */
    Result deleteById(Long id);

    /**
     * 按帖子id批量删除评论
     *
     * @param postId 帖子id
     * @return Result
     */
    Result deleteBatchByPostId(Long postId);

    /**
     * 按主键ids批量删除评论信息
     *
     * @param ids 主键ids
     */
    void deleteBatchByIds(List<Long> ids);

    /**
     * 按主键id查询评论基本信息
     *
     * @param id 主键id
     * @return CommentEntity
     */
    CommentEntity queryInfoById(Long id);

    /**
     * 按帖子id查询所有评论
     *
     * @param postId           帖子id
     * @param isLikeNumberSort 是否按热度排序(默认按发评时间排序)
     * @return List<CommentDetailInfoVO>
     */
    List<CommentDetailInfoVO> queryInfoByPostId(Long postId, Boolean isLikeNumberSort);

    /**
     * 按帖子id查询所有一级评论
     *
     * @param postId           帖子id
     * @param isLikeNumberSort 是否按热度排序(默认按发评时间排序)
     * @return List<CommentDetailInfoVO>
     */
    List<CommentDetailInfoVO> queryOneLevelByPostId(Long postId, Boolean isLikeNumberSort);

    /**
     * 按父评论id查询所有子评论
     *
     * @param parentId         父评论id
     * @param isLikeNumberSort 是否按热度排序(默认按发评时间排序)
     * @return List<CommentDetailInfoVO>
     */
    List<CommentDetailInfoVO> queryChildByParentId(Long parentId, Boolean isLikeNumberSort);

    /**
     * 按父评论id查询所有扁平化子评论
     *
     * @param parentId         父亲id
     * @param isLikeNumberSort 是否按热度排序(默认按发评时间排序)
     * @return List<FlatChildCommentVO>
     */
    List<FlatChildCommentVO> queryFlatChildByParentId(Long parentId, Boolean isLikeNumberSort);

    /**
     * 按用户id查询评论的回复消息
     *
     * @param userId 用户id
     * @return List<ReplyCommentVO>
     */
    List<ReplyCommentVO> queryReplyByUserId(Long userId);

    /**
     * 用户点赞评论
     *
     * @param commentLikeVO 用户点赞评论请求体
     * @return Result
     */
    Result like(CommentLikeVO commentLikeVO);

}

